//定制请求的实例
//导入axios 
import axios from 'axios';
import router from '@/router'
import { ElMessage } from 'element-plus'
//定义一个变量,记录公共的前缀  ,  baseURL

const instance = axios.create({
  baseURL: '/api',  // 使用相对路径
  timeout: 120000,  // 增加超时时间到2分钟
});

// 创建一个无超时限制的实例，用于文件上传
export const uploadInstance = axios.create({
  baseURL: '/api',
  timeout: 0,  // 0表示无超时限制
});

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 可以在这里添加认证 Token 等逻辑
    // const tokenStore = useTokenStore();
    // if(tokenStore.token){
    //     config.headers.Authorization = tokenStore.token
    // }
    return config
  },
  error => {
    console.error('Request Error:', error)
    return Promise.reject(error)
  }
)

// 为上传实例添加相同的请求拦截器
uploadInstance.interceptors.request.use(
  config => {
    // 同上，可以添加认证逻辑
    return config
  },
  error => {
    console.error('Upload Request Error:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  response => {
    // 如果是arraybuffer类型（例如验证码图片），直接返回原始响应
    if (response.request.responseType === 'arraybuffer') {
      return response;
    }
    
    // 对于其他响应，假设返回的是 { code, message, data } 格式
    const res = response.data;
    // 这里可以根据后端定义的成功/失败 code 进行判断
    // if (res.code === 0 || res.code === 200) { // 假设 0 或 200 为成功
    //   return res;
    // } else {
    //   ElMessage.error(res.message || 'Error');
    //   return Promise.reject(new Error(res.message || 'Error'));
    // }
    // 如果后端直接返回数据，没有统一格式，则直接返回 data
    return res;
  },
  error => {
    console.error('Response Error:', error);
    // 可以添加统一的错误处理，例如未授权跳转登录页
    // if (error.response.status === 401) {
    //   router.push('/login');
    // }
    ElMessage.error(error.response?.data?.message || error.message || '请求失败');
    return Promise.reject(error);
  }
)

// 为上传实例添加相同的响应拦截器
uploadInstance.interceptors.response.use(
  response => {
    // 文件上传通常也返回json数据，告知上传结果
    const res = response.data;
    // 根据实际后端返回格式判断成功或失败
    // if (res.code === 0 || res.code === 200) {
    //   return res;
    // } else {
    //   ElMessage.error(res.message || '上传失败');
    //   return Promise.reject(new Error(res.message || '上传失败'));
    // }
    return res;
  },
  error => {
    console.error('Upload Response Error:', error);
    ElMessage.error(error.response?.data?.message || error.message || '文件上传失败');
    return Promise.reject(error);
  }
)

export default instance; 